package tech.aistar.day02;

/**
 * 本类用来演示: 递归算法
 *
 * @author: success
 * @date: 2022/7/19 9:12 上午
 */
public class RecursionDemo {
    public static void main(String[] args) {
        System.out.println(feiFor(6));

        System.out.println(jieFor(6));
    }

    /**
     * 1 1 2 3 5 8 13 ...
     * 斐波那契数列
     * @param n 位置
     * @return 该位置对应的值
     */
    public static int fei(int n){
        //指定递归出口
        if(n==1 || n==2)
            return 1;
        //自己调用自己
        return fei(n-1) + fei(n-2);
    }

    /**
     *
     * 求阶乘
     * @param n
     * @return
     */
    public static int jie(int n){
        if(n==1)
            return 1;
        return n*jie(n-1);
    }

    public static int feiFor(int n){
        //编程从定义变量开始
        if(n==1 || n==2)
            return 1;
        //定义俩个变量
        int start = 1;
        int end = 1;
        //从第三个位置开始
        int result = 0;

        for (int i = 3; i <=n; i++) {
            result = start + end;

            start = end;
            end = result;
        }
        return result;
    }

    public static int jieFor(int n){
        int result =1;
        for (int i = n; i >=1; i--) {
            result*=i;//result = result*i;
        }
        return result;
    }
}
